/*
 * @Description: JavaScript 的装箱与拆箱
 * @Author: zzj
 * @Date: 2021-09-07 10:08:23
 * @LastEditors: zzj
 * @LastEditTime: 2021-09-07 10:31:53
 */

// 为什么一个数值类型，可以调用对象的方法？
/*
当我们的基本数据类型调用原型方法时，
实际上JS完成了装箱和拆箱的过程
 */
var num1 = 123;
var num2 = Number(123);
var num3 = new Number(123);   //对象类型
console.log(num1);
console.log(num2);
console.log(num3);

//类型
console.log(typeof num2);  //number
console.log(typeof num3);  //object
console.log(typeof num3.valueOf());  //number
console.log(num3.valueOf()==num2);   //true
console.log(num3.valueOf()===num2);   //true
console.log(num3==num2);  //true   valueOf隐式调用
console.log(num3===num2);  //false   类型不同

var str1 = String("xiaohong");
var str2 = new String("xiaolv");
console.log(str1);
console.log(str2);

function Animal(name){  //动物的构造函数
    this.name = name;
    return name;
}
var dog1 = Animal("xiaobai");
var dog2 = new Animal("xiaohei");
console.log(dog1);
console.log(dog2);

